//package com.ruoyi.system.listener;
//
//
//import com.ruoyi.iot.domain.vo.EventCache;
//import com.ruoyi.iot.domain.vo.PlanCache;
//import com.ruoyi.system.domain.iot.SysCache;
//import com.ruoyi.system.utils.MyPriorityQueue;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @author LiangYun
// * @Description
// * @date 2019/12/13 16:36
// */
//@Configuration      //1.主要用于标记配置类，兼备Component的效果。
//@EnableScheduling   // 2.开启定时任务
//@Slf4j
//public class PlanEventListener {
//    @Autowired
//    private PlanService planService;
//
//    //3.添加定时任务 @Scheduled(cron = "0/5 * * * * ?")
//    //或直接指定时间间隔，例如：5秒
//    @Scheduled(fixedRate = 1000)
//    private void configureTasks() {
//        //log.info("定时任务开始,开始时间："+System.currentTimeMillis());
//        //获取可执行的计划
//        try {
//            long time = System.currentTimeMillis();
//            List<EventCache> list = MyPriorityQueue.pollDataFromQueue(time);
//            List<PlanCache> planList = new ArrayList<PlanCache>();
//            //log.info("time："+time + " size:"+list.size());
//            for (EventCache event : list) {
//                //获取计划事件缓存
//                PlanCache planCache = SysCache.getPlanEvent(event.getEventId());
//                if (planCache == null) {
//                    continue;
//                }
//                log.info("执行命令：  执行时间：" + event.getLastTime());
//                //执行命令
//                planService.executePlannedEvent(planCache.getChannelId().toString());
//                //计算下次执行时间
//                planCache.setLastTime(System.currentTimeMillis() + (planCache.getIntervalTime() * 1000));
//                log.info("下次执行时间：" + planCache.getLastTime());
//                //重新添加到计划执行队列中
//                MyPriorityQueue.addDataToQueue(planCache);
//                planList.add(planCache);
//            }
//            SysCache.setPlanMap(planList);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        //log.info("定时任务结束");
//    }
//}
